"""
背景：
    1：线程之间数据是共享的，进程之间数据是相互隔离。
    2：如果多线程并发操作同一个数据（全局变量），就有可能引发安全问题，出现非法值。
        可以使用线程同步（加锁）的思路来解决。

需求：
    定义两个函数，实现循环100w次，每次循环给全局变量+1，创建两个子线程执行对应的两个函数，观察结果。

问题描述：
    按照上面的需求，实现代码，我们需要的结果应该100w，200w，但是可能会有非法值。
"""

# 导包
import threading

# 定义全局变量
g_num = 0

# 定义两个函数
# 第一个函数，get_sum1函数，实现对g_num全局变量，累加100w次
def get_sum1():
    global g_num # 告诉解释器，这个变量是定义在当前模块中的，不是全局变量
    # 具体的累加100w次操作
    for i in range(1000000):
        g_num += 1
    print(f"get_sum1函数，累加结果为：{g_num}")

# 第二个函数，get_sum2函数，实现对g_num全局变量，累加100w次
def get_sum2():
    global g_num # 告诉解释器，这个变量是定义在当前模块中的，不是全局变量
    # 具体的累加100w次操作
    for i in range(1000000):
        g_num += 1
    print(f"get_sum2函数，累加结果为：{g_num}")

if __name__ == '__main__':
    # 创建两个线程，分别关联上述的两个函数。
    t1 = threading.Thread(target=get_sum1)
    t2 = threading.Thread(target=get_sum2)

    # 开启线程
    t1.start()
    t2.start()
